package org.common.utils.tableconfig;

import org.common.utils.database.access.DataAccess;
import org.common.utils.database.access.DataSourceTool;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.sql.DataSource;

/**
 * 配置表管理器
 * @author zhouzhibing
 * @date 2024/12/31
 */
public class TableConfigManager {

    private static final Logger log = LoggerFactory.getLogger(TableConfigManager.class);

    /**
     * 配置表配置
     */
    private TableConfigData tableConfigData;
    /**
     * 记录初始化的包名
     */
    private String packageName;
    /**
     * 数据访问
     */
    private final DataAccess dataAccess;

    public TableConfigManager(String host , String username , String password) {
        DataSource dataSource = DataSourceTool.newHikariDataSourceByHost(host, username, password , 1, 1);
        this.dataAccess = new DataAccess(dataSource);
    }

    /**
     * 根据指定
     * @param packageName
     */
    public synchronized void init(String packageName) {
        TableConfigData tableConfigData = new TableConfigData();
        tableConfigData.init(packageName , dataAccess);

        this.packageName = packageName;
        this.tableConfigData = tableConfigData;
    }

    /**
     * 更新 , 重新初始化
     */
    public final void update() {
        init(packageName);
    }

    /**
     * 获取指定配置数据
     * @param clzss 类型
     * @return 返回配置数据对象
     * @param <T> 泛型
     */
    public final <T extends TableData> T getData(Class<T> clzss) {
        return (T) tableConfigData.getData(clzss);
    }
}
